LengthOfString<S>
文字列を引数にとって、その長さを返す
使用例
code:ts
type A0 = LengthOfString<''>; // 0
type A7 = LengthOfString<'mrsekut'>; // 7
type A16 = LengthOfString<'Sound! Euphonium'>; // 16
考え方のポイント
イメージ的にはこういうことをしたい
code:ts
type LengthOfString<S extends string> =
S extends ${infer H}${infer Tail}
? 1 + LengthOfString<Tail>
: 0;
1文字ずつ消化しつつ、結果(number)を1ずつインクリメントして再帰すればいい
しかし、型レベルの数値演算はできないので、それに代わる方法を考える必要がある
再帰の度に配列の要素を追加していき、最終的にstrArr['length']で長さを取ればいい
定義例1
code:ts
type LengthOfString<S extends string> = StrToArray<S>'length'; type StrToArray<S extends string> =
S extends ${infer H}${infer Tail}
: [];
ちなみに、StrToArrayの結果はこんな感じ
code:ts
定義例2
code:ts
type LengthOfString<S extends string, L extends unknown[] = []> =
S extends ${infer H}${infer R}
2つの型引数を使って、1つの型定義で、定義例1と同じことをしている